// 快递公司路由处理函数文件
// 该文件包含了快递公司相关API的具体实现逻辑

const { sequelize } = require('../db/index');
const initModels = require('../models/init-models');
const { Op } = require('sequelize'); // 添加Op的正确导入

// 初始化模型
const models = initModels(sequelize, require('sequelize').DataTypes);
const CourierCompanies = models.courier_companies;

/**
 * 获取所有快递公司列表
 * @param {Request} req - 请求对象
 * @param {Response} res - 响应对象
 */
async function getCourierCompanies(req, res) {
  try {
    // 查询所有快递公司，按名称排序
    const courierCompanies = await CourierCompanies.findAll({
      order: [['courier_name', 'ASC']]
    });
    
    // 返回成功响应
    res.success(courierCompanies, '获取快递公司列表成功');
  } catch (err) {
    // 返回错误响应
    res.error('获取快递公司列表失败');
  }
}

/**
 * 添加新的快递公司
 * @param {Request} req - 请求对象
 * @param {Response} res - 响应对象
 */
async function addCourierCompany(req, res) {
  try {
    // 从请求体获取数据
    const { courier_name, courier_code } = req.body;
    
    // 检查是否已存在相同的快递公司编码
    const existingCourier = await CourierCompanies.findOne({
      where: { courier_code }
    });
    
    if (existingCourier) {
      return res.error('快递公司编码已存在');
    }
    
    // 创建新的快递公司记录
    const newCourier = await CourierCompanies.create({
      courier_name,
      courier_code
    });
    
    // 返回成功响应
    res.success(newCourier, '添加快递公司成功');
  } catch (err) {
    // 返回错误响应
    res.error('添加快递公司失败');
  }
}

/**
 * 更新快递公司信息
 * @param {Request} req - 请求对象
 * @param {Response} res - 响应对象
 */
async function updateCourierCompany(req, res) {
  try {
    // 从请求参数获取ID
    const { id } = req.params;
    
    // 从请求体获取更新数据
    const { courier_name, courier_code } = req.body;
    
    // 查找要更新的快递公司
    const courierCompany = await CourierCompanies.findByPk(id);
    
    if (!courierCompany) {
      return res.error('快递公司不存在');
    }
    
    // 检查是否已存在相同的快递公司编码（排除当前记录）
    if (courier_code && courier_code !== courierCompany.courier_code) {
      const existingCourier = await CourierCompanies.findOne({
        where: { 
          courier_code,
          courier_id: { [Op.ne]: id }  // 修复Op的使用
        }
      });
      
      if (existingCourier) {
        return res.error('快递公司编码已存在');
      }
    }
    
    // 更新快递公司信息
    await courierCompany.update({
      courier_name: courier_name || courierCompany.courier_name,
      courier_code: courier_code || courierCompany.courier_code
    });
    
    // 返回成功响应
    res.success(courierCompany, '更新快递公司成功');
  } catch (err) {
    // 返回错误响应
    res.error('更新快递公司失败');
  }
}

/**
 * 删除快递公司
 * @param {Request} req - 请求对象
 * @param {Response} res - 响应对象
 */
async function deleteCourierCompany(req, res) {
  try {
    // 从请求参数获取ID
    const { id } = req.params;
    
    // 查找要删除的快递公司
    const courierCompany = await CourierCompanies.findByPk(id);
    
    if (!courierCompany) {
      return res.error('快递公司不存在');
    }
    
    // 删除快递公司记录
    await courierCompany.destroy();
    
    // 返回成功响应
    res.success(null, '删除快递公司成功');
  } catch (err) {
    // 返回错误响应
    res.error('删除快递公司失败');
  }
}

// 导出处理函数
module.exports = {
  getCourierCompanies,
  addCourierCompany,
  updateCourierCompany,
  deleteCourierCompany
};